package com.bbva.kyfb.kyfbofi.converters;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.ArrayUtils;

import com.bbva.jee.arq.spring.core.contexto.ArqSpringContext;
import com.bbva.jee.arq.spring.core.gce.CodigoError;
import com.bbva.jee.arq.spring.core.gce.ExcepcionEjecucionAplicacion;
import com.bbva.jee.arq.spring.core.log.I18nLog;
import com.bbva.jee.arq.spring.core.log.I18nLogFactory;
import com.bbva.jee.arq.spring.core.util.excepciones.PropiedadNoEncontradaExcepcion;
import com.bbva.kyfb.kyfbdto.firmas.bo.Auditoria;
import com.bbva.kyfb.kyfbdto.firmas.bo.ComponenteFirmable;
import com.bbva.kyfb.kyfbdto.firmas.bo.ComponentePutFirma;
import com.bbva.kyfb.kyfbdto.firmas.bo.DatosPAU;
import com.bbva.kyfb.kyfbdto.firmas.bo.FicheroInfo;
import com.bbva.kyfb.kyfbdto.firmas.bo.FicheroPdteFirma;
import com.bbva.kyfb.kyfbdto.firmas.bo.FirmaComponente;
import com.bbva.kyfb.kyfbdto.firmas.bo.FirmanteInfo;
import com.bbva.kyfb.kyfbdto.firmas.bo.ObjetoFirmable;
import com.bbva.kyfb.kyfbdto.firmas.bo.UsuarioInfo;
import com.bbva.kyfb.kyfbdto.firmas.errores.Errores_kyfb_servicios;
import com.bbva.kyfb.kyfbdto.firmas.filtros.FilesDeleteInfo;
import com.bbva.kyfb.kyfbjpatlbh.dominiotlbh.Ttlsbfua;
import com.bbva.kyfb.kyfbjpatlbh.dominiotlbh.TtlsbfuaPK;
import com.bbva.kyfb.kyfbjpatlbh.dominiotlbh.Ttlsbont;
import com.bbva.kyfb.kyfbjpatlbh.dominiotlbh.TtlsbontPK;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.Ttlsbffs;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.TtlsbffsPK;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.Ttlsbfrf;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.TtlsbfrfPK;
import com.bbva.kyfb.kyfbofi.objects.Producto;
import com.bbva.kyfb.kyfbutils.constantes.ConstantesFO;
import com.bbva.kyfb.kyfbutils.constantes.UtilFO;
import com.bbva.kyfb.kyfbutils.mifid.MifidFunctions;
import com.bbva.kyfb.kyfbutils.pau.FuncionesPAU;


/**
 * The Class ResulSetDtoConverter.
 */
public final class ResulSetDtoConverter {
	/** Variable LOG. */
	private static final I18nLog LOG = I18nLogFactory
			.getLogI18n(ResulSetDtoConverter.class);

	/** The Constant VALIDATION_ERROR. */
	private static final CodigoError VALIDATION_ERROR = Errores_kyfb_servicios.ERROR_FORMATEO_RESPUESTA;

	/**
	 * Instantiates a new resul set dto converter.
	 */
	private ResulSetDtoConverter() {
		//Evitamos instanciar
	}

	/**
	 * Resul set to producto dto.
	 *
	 * @param object the object
	 * @return the producto
	 */
	public static Producto resulSetToProductoDto(final Object[] object) {
		try{
			final Producto productoDto = new Producto();
			productoDto.setCodProd((Integer)object[0]);
			productoDto.setCodFamilia(Character.toString((Character)object[1]));
			productoDto.setCodSubfamilia(((Short)object[2]).intValue());
			productoDto.setXtiVenta(Character.toString((Character)object[3]));
			productoDto.setDesProd(Character.toString((Character)object[4]));
			productoDto.setAudUsuario(Character.toString((Character)object[5]));
			productoDto.setAudModif((Date)object[6]);
			productoDto.setCodIdioma(((Short)object[7]).intValue());
			return productoDto;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}

	/**
	 * Creates the componentes firmables.
	 *
	 * @param firmablesAplicacion the firmables aplicacion
	 * @return the list
	 */
	public static List<ComponenteFirmable> createComponentesFirmables(final List<Object[]> firmablesAplicacion) {
		final List<ComponenteFirmable> listaComponentesFirmables = new ArrayList<ComponenteFirmable>();
		for (final Object[] componenteFirmable : firmablesAplicacion) {
			listaComponentesFirmables.add(createComponenteFirmable(componenteFirmable));
		}
		return listaComponentesFirmables;
	}

	/**
	 * Creates the componente firmable.
	 *
	 * @param componenteFirmable the componente firmable
	 * @return the componente firmable
	 */
	public static ComponenteFirmable createComponenteFirmable(final Object[] componenteFirmable) {
		try {
			final ComponenteFirmable firmable = new ComponenteFirmable();
			firmable.setDescripcion((String) componenteFirmable[1]);
			firmable.setHoraCorte("");
			firmable.setTipoCorte("");
			firmable.setTipoOrden((String) componenteFirmable[0]);
			firmable.setMensajeAviso((String)componenteFirmable[5]);
			firmable.setCodigoMensajeAviso((String)componenteFirmable[6]);
			return firmable;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}


	/**
	 * Creates the firmante info.
	 *
	 * @param firmantes the firmantes
	 * @return the list
	 */
	public static List<FirmanteInfo> createFirmantesInfo(final List<Object[]> firmantes) {
		final List<FirmanteInfo> listaFirmantes = new ArrayList<FirmanteInfo>();
		for (final Object[] firmante : firmantes) {
			listaFirmantes.add(createFirmanteInfo(firmante));
		}
		return listaFirmantes;
	}

	/**
	 * Creates the firmante info.
	 *
	 * @param firmante the firmante
	 * @return the firmante info
	 */
	public static FirmanteInfo createFirmanteInfo(final Object[] firmante) {
		try {
			final FirmanteInfo info = new FirmanteInfo();
			info.setCodUsuario((String) firmante[0]);
			info.setsTipoValidacion("");
			info.setPoderFirma((String) firmante[1]);
			return info;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}

	/**
	 * Creates the fichero pdte dto from entity.
	 *
	 * @param entidades the entidades
	 * @return the list
	 */
	public static List<FicheroPdteFirma> createFicherosPdteDtoFromEntity(final List<Object[]> entidades) {
		final ArrayList<FicheroPdteFirma> fichConf = new ArrayList<FicheroPdteFirma>();
		for (final Object o[] : entidades) {
			fichConf.add(createFicheroPdteDtoFromEntity(o));
		}
		return fichConf;
	}

	/**
	 * Creates the fichero pdte dto from entity.
	 *
	 * @param o the o
	 * @return the fichero pdte firma
	 */
	public static FicheroPdteFirma createFicheroPdteDtoFromEntity(final Object[] o) {
		try {
			final FicheroPdteFirma fichero = new FicheroPdteFirma();
			fichero.setNumItem(((BigDecimal) o[0]).toString());
			fichero.setsNumItem(((BigDecimal) o[0]).longValue());
			fichero.setdFechaCreacion((Date) o[1]);
			fichero.setsNombreFichero(((String) o[2]).trim());
			fichero.setsAsunto(((String) o[3]).trim());
			fichero.setiNumeroOrdenes((Integer) o[4]);
			fichero.setdImporte((BigDecimal) o[5]);
			fichero.setsCodEstadoFichero(((String) o[6]).trim());
			fichero.setsCodTipoOrden(((String) o[7]).trim());
			fichero.setlPesoActual(((BigDecimal) o[8]).doubleValue());
			fichero.setsIdOrdenFirmas(((String) o[9]).trim());
			fichero.setEsOrdenMiFID(MifidFunctions.esOrdenMifid(fichero.getsCodTipoOrden()));
			try {
				fichero.setdFechaProceso(new SimpleDateFormat("yyyyMMdd").parse(((String) o[10]).trim()));
			} catch (final ParseException e) {
				//TODO Esto es correcto?
			}
			fichero.setsDivisa(((String) o[11]).trim());
			fichero.setCodigoServicioGlobal( o[12].toString());
			fichero.setImporteMaximoRegistro(((BigDecimal) o[13]).doubleValue());
			fichero.setlPesoActual(((BigDecimal)o[8]).doubleValue());
			fichero.setlPesoFichero(1.0);
			fichero.setModoOrden(o[14].toString());
			return fichero;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final PropiedadNoEncontradaExcepcion e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}


	/**
	 * Creates the auditoria dto from entity.
	 *
	 * @param listFua the list fua
	 * @return the list
	 */
	public static List<Auditoria> createAuditoriasDtoFromEntity(final List<Ttlsbfua> listFua) {
		final ArrayList<Auditoria> listaAuditoria = new ArrayList<Auditoria>();
		for (final Ttlsbfua fua : listFua) {
			listaAuditoria.add(createAuditoriaDtoFromEntity(fua));
		}
		return listaAuditoria;
	}

	/**
	 * Creates the auditoria dto from entity.
	 *
	 * @param fua the fua
	 * @return the auditoria
	 */
	public static Auditoria createAuditoriaDtoFromEntity(final Ttlsbfua fua) {
		try {
			final Auditoria auditoria = new Auditoria();
			// TODO: Peso no disponible
			// auditoria.setdPesoOrden(fua.get);
			// TODO MAPEAR ACCIONES
			auditoria.setsCodAccion(fua.getId().getCodAccion());
			// TODO MAPEAR Estados
			auditoria.setsCodEstado(fua.getCodEstadfic().trim());
			auditoria.setsCodUsuario(fua.getCodUsuario().trim());
			auditoria.setsCodUsuarioFirma(fua.getCodUsufirma().trim());
			try {
				auditoria.setsFechaAccion(new SimpleDateFormat("yyyyMMdd HHmmssSS").parse(fua.getFecAccio().trim()+" "+fua.getFecAccion2().trim()));
			} catch (final ParseException e) {
				//TODO Esto es asi?
			}
			auditoria.setsPoderUsuarioFirmante(fua.getCodUsupoder().trim());
			return auditoria;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}


	/**
	 * Creates the objeto firmable dto from entity.
	 *
	 * @param listPpa the list ppa
	 * @return the list
	 */
	public static List<ObjetoFirmable> createObjetosFirmablesDtoFromEntity(final List<Object[]> listPpa) {
		final ArrayList<ObjetoFirmable> listaObjetoFirmable = new ArrayList<ObjetoFirmable>();
		for (final Object o[] : listPpa) {
			listaObjetoFirmable.add(createObjetoFirmableDtoFromEntity(o));
		}
		return listaObjetoFirmable;
	}

	/**
	 * Creates the objeto firmable dto from entity.
	 *
	 * @param o the o
	 * @return the objeto firmable
	 */
	public static ObjetoFirmable createObjetoFirmableDtoFromEntity(final Object[] o) {
		try {
			final ObjetoFirmable objF = new ObjetoFirmable();
			objF.setsCodObj((String) o[0]);
			objF.setsPais((String) o[1]);
			objF.setsDesObj((String) o[2]);
			objF.setIsFirmable((String) o[3]);
			objF.setsDesUrlEje((String) o[4]);
			objF.setsDesUrlAud((String) o[5]);
			objF.setsDesUrlDet((String) o[6]);
			objF.setXsnFdsenv((String) o[7]);
			objF.setXsnFdsrec((String) o[8]);
			return objF;
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final ClassCastException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(VALIDATION_ERROR, e);
		}
	}


	/**
	 * Tipo ordenes to string.
	 *
	 * @param resul the resul
	 * @param tipoOrdenes the tipo ordenes
	 * @return the string
	 */
	public static String tipoOrdenesToString(final List<Object[]> resul, final String[] tipoOrdenes) {
		final StringBuilder tipoOrdStrFinal = new StringBuilder();
		if (!ArrayUtils.isEmpty(tipoOrdenes)) {
			for (final Object[] obj : resul) {
				if (Arrays.asList(tipoOrdenes).contains(obj[0])){
					tipoOrdStrFinal.append(obj[0]).append("\\|");
				}
			}
		}
		return tipoOrdStrFinal.toString();
	}


	/**
	 * @param fichero
	 * @param info
	 * @param XsnFirmado
	 * @return
	 * @throws ExcepcionEjecucionAplicacion
	 */
	public static Ttlsbfrf formarFRF(final FicheroPdteFirma fichero, final FirmaComponente firmaComponente, final Character XsnFirmado) throws ExcepcionEjecucionAplicacion {
		final TtlsbfrfPK frfPK = new TtlsbfrfPK(fichero.getdFechaCreacion(), firmaComponente.getsNIFUsuario());
		Ttlsbfrf frf = Ttlsbfrf.findTtlsbfrf(frfPK);

		if(frf == null){
			frf = new Ttlsbfrf();
			frf.setCodNumaleat(Long.toString(FuncionesPAU.getReferenciaNPosiciones(UtilFO.LONGITUD_NUM_ALEATORIO)));
			try {
				frf.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLSB));
			} catch (final PropiedadNoEncontradaExcepcion ex) {
				throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.SERVICIO_NO_DISPONIBLE, ex);
			}
			frf.setAudFmodific(new Date());
			frf.setId(frfPK);
		}
		frf.setXsnFirmado(XsnFirmado);
		return frf;
	}


	/**
	 * @param fichero
	 * @param info
	 * @return
	 * @throws ExcepcionEjecucionAplicacion
	 */
	public static Ttlsbfrf formarFRF(final FicheroPdteFirma fichero, final FicheroInfo info) throws ExcepcionEjecucionAplicacion {
		final Ttlsbfrf frf = new Ttlsbfrf();
		final TtlsbfrfPK frfPK = new TtlsbfrfPK(fichero.getdFechaCreacion(), info.getsNifDni());

		frf.setCodNumaleat(fichero.getsNumeroAleatorio());
		frf.setXsnFirmado(UtilFO.XSN_FIRMADO_N);
		try {
			frf.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLSB));
		} catch (final PropiedadNoEncontradaExcepcion ex) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.SERVICIO_NO_DISPONIBLE, ex);
		}
		frf.setAudFmodific(new Date());
		frf.setId(frfPK);
		return frf;
	}

	/**
	 * @param fichero
	 * @param info
	 * @return
	 * @throws ExcepcionEjecucionAplicacion
	 */
	public static Ttlsbffs formarFFS(final FicheroPdteFirma fichero, final FicheroInfo info) throws ExcepcionEjecucionAplicacion {
		final Ttlsbffs ffs = new Ttlsbffs();
		final TtlsbffsPK ffsPK = new TtlsbffsPK(BigDecimal.valueOf(fichero.getsNumItem()),fichero.getdFechaCreacion(), info.getsCodUsuario());
		ffs.setCodCanaldi(Short.valueOf(info.getCodCanal()));
		ffs.setCodBancoint(Short.valueOf(info.getCodClienteCash().substring(4, 8)));
		ffs.setCodLogon2(info.getCodClienteCash().substring(8, 16));
		ffs.setCodBancopr(Short.valueOf(info.getsBancoProducto()));
		ffs.setCodProdserv(Short.valueOf(info.getsCodProducto()));
		ffs.setCodSubprodu(Short.valueOf(info.getsCodSubproducto()));
		ffs.setDesNomfiche(fichero.getsNombreFichero());
		ffs.setCodNumaleat(fichero.getsNumeroAleatorio());
		if ( UtilFO.USUARIO_AUDITOR.equalsIgnoreCase(info.getStipoFirma()) ){
			ffs.setXtiTipoapod(UtilFO.USUARIO_AUDITOR.charAt(0));
		}else{
			ffs.setXtiTipoapod(UtilFO.USUARIO_APODERADO.charAt(0));
		}
		ffs.setXtiPodfir(fichero.getsPoderFirma());
		ffs.setXsnFirmado(UtilFO.XSN_FIRMADO_N);
		try {
			ffs.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLSB));
		} catch (final PropiedadNoEncontradaExcepcion ex) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.SERVICIO_NO_DISPONIBLE, ex);
		}
		ffs.setAudFmodific(new Date());
		ffs.setId(ffsPK);
		return ffs;
	}

	/**
	 * Formar ffs.
	 *
	 * @param fichero the fichero
	 * @param firmaComponente the firma componente
	 * @param cf the cf
	 * @return the ttlsbffs
	 * @throws PropiedadNoEncontradaExcepcion the propiedad no encontrada excepcion
	 */
	public static Ttlsbffs formarFFS(final FicheroPdteFirma fichero, final FirmaComponente firmaComponente, final ComponentePutFirma cf, final char xsnFirmado) throws PropiedadNoEncontradaExcepcion {
		final Ttlsbffs ffs = new Ttlsbffs();
		final TtlsbffsPK ffsPK = new TtlsbffsPK(BigDecimal.valueOf(fichero.getsNumItem()),fichero.getdFechaCreacion(), firmaComponente.getDatosPAU().getsCodUsuario());
		ffs.setCodCanaldi(Short.valueOf(firmaComponente.getDatosPAU().getsCanal()));
		ffs.setCodBancoint(Short.valueOf(firmaComponente.getDatosPAU().getsBancoInt()));
		ffs.setCodLogon2(firmaComponente.getDatosPAU().getsReferencia());
		ffs.setCodBancopr(Short.valueOf(firmaComponente.getDatosPAU().getsBancoProducto()));
		ffs.setCodProdserv(Short.valueOf(firmaComponente.getDatosPAU().getsProductoServicio()));
		ffs.setCodSubprodu(Short.valueOf(firmaComponente.getDatosPAU().getsCodSubProducto()));
		ffs.setDesNomfiche(fichero.getsNombreFichero());
		ffs.setCodNumaleat(firmaComponente.getDatosPAU().getsNumeroAleatorio());
		if ( UtilFO.USUARIO_AUDITOR.equalsIgnoreCase(firmaComponente.getsTipoFirmante().trim()) ){
			ffs.setXtiTipoapod(UtilFO.USUARIO_AUDITOR.charAt(0));
		}else{
			ffs.setXtiTipoapod(UtilFO.USUARIO_APODERADO.charAt(0));
		}
		ffs.setXtiPodfir(cf.getsPoderFirma());
		ffs.setXsnFirmado(xsnFirmado);
		ffs.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLSB));
		ffs.setAudFmodific(new Date());
		ffs.setId(ffsPK);
		return ffs;
	}

	/**
	 * Formar fua.
	 *
	 * @param codClienteCash the cod cliente cash
	 * @param fichero the fichero
	 * @param firmaComponente the firma componente
	 * @param cf the cf
	 * @param codAccion the cod accion
	 * @param intentoAud the intento aud
	 * @return the ttlsbfua
	 */
	public static Ttlsbfua formarFUA(final String codClienteCash, final FicheroPdteFirma fichero, final FirmaComponente firmaComponente, final ComponentePutFirma cf, final short codAccion, final int intentoAud) {
		final FicheroInfo file = new FicheroInfo();
		file.setCodClienteCash(codClienteCash);
		file.setsTipoOrden(new String[] { cf.getsTipoOrden().toString() });
		file.setIdOrden(cf.getsIdOrdenFirmas());
		final Ttlsbfua fua = crearFuaFromDto(file, firmaComponente.getDatosPAU(),intentoAud, codAccion, UtilFO.getCodNumero(fichero.getsCodEstadoFichero()));
		fua.setCodUsufirma(firmaComponente.getDatosPAU().getsCodUsuario());
		fua.setCodUsupoder(cf.getsPoderFirma());
		fua.setCodUsuario(firmaComponente.getsCodUsuario());
		return fua;
	}



	/**
	 * crearFuaFromDto Crea el objeto FUA para poder persistirlo.
	 *
	 * @param file the file
	 * @param usuario the usuario
	 * @return the ttlsbfua
	 */
	public static Ttlsbfua crearFuaFromDtoDelete(final FilesDeleteInfo file, final DatosPAU usuario) {
		final Ttlsbfua auditoria = new Ttlsbfua();
		try {
			final TtlsbfuaPK tlsTtlsbfuaPK = new TtlsbfuaPK(usuario.getsCanal()+usuario.getsBancoInt()+usuario.getsReferencia(), file.getsTipoOrden(), file.getsIdOrden(), UtilFO.BORRADO, UtilFO.BORRADO_INT);
			auditoria.setId(tlsTtlsbfuaPK);
			auditoria.setCodEstadfic(UtilFO.getCodNumero(UtilFO.EST_ELIMINADO_USUARIO));
			auditoria.setCodUsuario(usuario.getsCodUsuario());
			auditoria.setCodUsufirma(ConstantesFO.VACIO);
			auditoria.setCodUsupoder(ConstantesFO.VACIO);
			auditoria.setAudUsuario(usuario.getsCodUsuario());

			final String fecAccion = new SimpleDateFormat("yyyyMMdd").format(new Date());
			auditoria.setFecAccio(fecAccion);
			auditoria.setAudFmodific(new Date());

			final String fecAccion2 = new SimpleDateFormat("hhmmssSS").format(new Date());
			auditoria.setFecAccion2(fecAccion2.substring(0,fecAccion2.length() - 1));
		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.FORMATO_INCORRECTO, e);
		}
		return auditoria;
	}

	/**
	 * crearFuaFromDto Crea el objeto FUA para poder persistirlo.
	 *
	 * @param file the file
	 * @param usuario the usuario
	 * @param idAccion the id accion
	 * @param codAccion the cod accion
	 * @param estadoFua the estado fua
	 * @return the ttlsbfua
	 */
	private static Ttlsbfua crearFuaFromDto(final FicheroInfo file, final UsuarioInfo usuario, final int idAccion, final short codAccion, final String estadoFua) {
		final Ttlsbfua auditoria = new Ttlsbfua();
		try {
			auditoria.setAudFmodific(new Date());
			auditoria.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLBH));
			auditoria.setCodEstadfic(estadoFua);
			auditoria.setCodUsufirma(ConstantesFO.VACIO);
			auditoria.setCodUsupoder(ConstantesFO.VACIO);
			auditoria.setCodUsuario(usuario.getsCodUsuario());

			final String fecAccion = new SimpleDateFormat("yyyyMMdd").format(new Date());
			auditoria.setFecAccio(fecAccion);

			final String fecAccion2 = new SimpleDateFormat("hhmmssSS").format(new Date());
			auditoria.setFecAccion2(fecAccion2.substring(0,fecAccion2.length() - 1));

			auditoria.setId(new TtlsbfuaPK(file.getCodClienteCash(), file.getsTipoOrden()[0], file.getIdOrden(), codAccion, idAccion));

		} catch (final NullPointerException e) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.FORMATO_INCORRECTO, e);
		} catch (final PropiedadNoEncontradaExcepcion e) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.FORMATO_INCORRECTO, e);
		} catch (final IndexOutOfBoundsException e) {
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.FORMATO_INCORRECTO, e);
		}
		return auditoria;
	}


	/**
	 * @param usuario
	 * @param cpf
	 * @return
	 * @throws ExcepcionEjecucionAplicacion
	 */
	public static Ttlsbont formarONT(final UsuarioInfo usuario, final ComponentePutFirma cpf) throws ExcepcionEjecucionAplicacion {
		final Ttlsbont ont = new Ttlsbont();
		final TtlsbontPK ontPK = new TtlsbontPK( usuario.getsReferencia(), usuario.getsCodUsuario(), cpf.getsTipoOrden() );

		ont.setTimTimestam(new Date());
		ont.setAudFmodific(new Date());
		try {
			ont.setAudUsuario(ArqSpringContext.getPropiedad(UtilFO.USUARIO_BBDD_TLBH));
		} catch (final PropiedadNoEncontradaExcepcion ex) {
			LOG.error("ResulSetDtoConverter.formarONT - Error al obtener el usuario auditor.");
			throw new ExcepcionEjecucionAplicacion(Errores_kyfb_servicios.SERVICIO_NO_DISPONIBLE, ex);
		}
		ont.setId(ontPK);
		return ont;
	}

}
